home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 7680 < prev    next >
Encoding:
Text File  |  1996-08-05  |  2.6 KB  |  80 lines

  1. Path: pegasus.odyssee.net!news
  2. From: Kevin Swail <kyndar@odyssee.net>
  3. Newsgroups: comp.lang.c
  4. Subject: Getting the Address of the CD-ROM device driver through MSCDEX
  5. Date: Mon, 26 Feb 1996 19:23:30 -0800
  6. Organization: Odyssee Internet
  7. Message-ID: <31327932.7FA9@odyssee.net>
  8. NNTP-Posting-Host: pool9_2.odyssee.net
  9. Mime-Version: 1.0
  10. Content-Type: multipart/mixed; boundary="------------44953E4660FB"
  11. X-Mailer: Mozilla 2.0 (Win16; I)
  12.  
  13. This is a multi-part message in MIME format.
  14.  
  15. --------------44953E4660FB
  16. Content-Type: text/plain; charset=us-ascii
  17. Content-Transfer-Encoding: 7bit
  18.  
  19. To Anybody who can help!
  20.  
  21.     I've written the following C (TC v3.0) program in order to try to 
  22.  find the address of the CD-ROM device driver.  It does not work however! 
  23.  For some reason, even though I pass the address of my strucure to the 
  24. interrupt, it doesn't send me back the Driver address.  Please Help!  If 
  25. I can get this working, then I have a chance at making a CD-ROM audio 
  26. player using C.  Thanks for the help!
  27.  
  28.                         Kevin Swail
  29.                         kyndar@odyssee.net
  30.  
  31. --------------44953E4660FB
  32. Content-Type: text/plain; charset=us-ascii
  33. Content-Transfer-Encoding: 7bit
  34. Content-Disposition: inline; filename="!!!.C"
  35.  
  36. // addr.c
  37. // gets the address of the device driver for the 1st CD-ROM, and its name
  38. // (note: For now only for 1 CD-ROM!)
  39. #include <dos.h>         // for geninterrupt(), REGS etc...
  40. #include <stdio.h>       // for printf() etc...
  41.  
  42. struct DRIVER
  43.     {
  44.     unsigned char subunit;                //subunit CD-ROM number
  45.     unsigned int  segment;                //segment of CD-ROM device driver
  46.     unsigned int  offset;                 //offset  of CD-ROM device driver
  47.     };
  48.  
  49. void main(void)
  50.     {
  51.     struct DRIVER driver;
  52.     char far *farptr;
  53.     int rep;
  54.  
  55.     printf("\n*Address of Device driver before interrupt call : %04X:%04X",
  56.        driver.segment,driver.offset);
  57.     _AX = 0x1501;                       //function to be used of int 2Fh
  58.         _BX = FP_OFF((void far *) &driver); //BX must have offset  of driver structure
  59.         _ES = FP_SEG((void far *) &driver); //ES must have segment of driver structure
  60.     geninterrupt(0x2F);                 //call int 2Fh (MSCDEX)
  61.  
  62.         printf("\n ES:BX --> %04X:%04X",_ES,_BX);
  63.     printf("\nDriver sub-unit (CD-ROM number): %X",driver.subunit);
  64.     printf("\n*Address of Device driver after  interrupt call : %04X:%04X",
  65.         driver.segment,driver.offset);
  66.  
  67.                                      //display name of driver
  68.  
  69.     farptr = MK_FP(driver.segment,driver.offset + 10);
  70.  
  71.     printf("\n\nValue of farptr : %lx\n",farptr);
  72.     for (rep=0;rep<8;rep++)
  73.         {
  74.         printf("%c,",*(farptr+rep));
  75.         }
  76.    } //end of program
  77.  
  78. --------------44953E4660FB--
  79.  
  80.